草庐IT

c++ - 控制反转的利弊

全部标签

无法读取 utmpx 文件

packagemainimport("os""fmt")funcmain(){fd,err:=os.Open("/var/run/utmpx")fmt.Println(fd,err)vardata[]bytelen,err:=fd.Read(data)fmt.Println(len,err)}&{0xc42000a240}nil0nil没有错误,也没有数据。这个路径/var/run/utmpx是从系统头文件中读取的。如何得到这个路径是anotherquestion系统:macOSelcapiton,go版本go1.8darwin/amd64**我的最终目标是将此文件读入gostruct

windows - Golang - Windows 控制台在运行 go.exe 时退出

我使用MSI安装程序在Windows10中安装了Go。但是,当我使用env、build、install、list等参数在cmd(或PowerShell)中运行时,...运行go命令后,控制台窗口关闭(或崩溃?)。这可以防止我在编译go代码时看到任何错误或任何东西。Windows中是否有某种包含控制台主机数据(如崩溃、错误和警告)的日志?这对于查明控制台或控制台主机是否因某种原因崩溃非常有帮助。举个例子:goenv不会输出任何内容,控制台窗口会立即关闭。编辑:澄清一下,我没有在运行对话框中运行这个命令,我是从管理员命令提示符运行它(我尝试使用PowerShell,也没有成功)。如果我运行

c - 与 c 相比,Go 的二进制大小

这个问题在这里已经有了答案:ReasonforhugesizeofcompiledexecutableofGo(3个答案)关闭6年前。昨天我只是想比较简单的golangHelloWorld应用程序和c,gobinary是2-3MB(只是fmt.Println)然而,等效的C代码只有大约20kb(printf)。然后我检查了两个二进制文件正在执行的系统调用,使用strace;两者之间没有太大区别,所以你知道为什么golang二进制文件与等效的c语言相比如此庞大吗?

go - 如何反转 golang map 中项目的顺序?

这个问题在这里已经有了答案:Collectvaluesinorder,eachcontainingamap(7个答案)关闭4年前。我是golang的新手,我想颠倒映射中对的出现顺序,以便最后一对排在第一位:mapA:=map[string]int{"cat":5,"dog":2,"fish":3,}fmt.Println(mapA)map[cat:5dog:2fish:3]生成的map应该是这样的:map[fish:3dog:2cat:5]它可以是一个新的mapB,具有相同的项目但顺序颠倒。我怎样才能做到这一点?

c - 从 Golang 中的 c 函数返回字符串

我正在尝试在GO中调用C函数。这适用于某些扩展(对于整数)。但是,存在问题下面给出了一个最小的例子packagemain/*#include#include#includevoidmy_reverse(char*src,intlen,char*dst){dst=malloc(sizeof(char)*(len+1));printf("[c-part]src=%s\n",src);for(inti=0;i这是两个c函数,它们在c中分配一个新的缓冲区。但是,我得到了输出[c-part]src=HelloWorld[c-part]dst=dlroWolleH[gopart]dst=willr

c - 找不到gmp库

我试着安装依赖gmp的pbc库。Dockerfile:FROMgolang:1.9.6-alpine3.7RUNmkdir-p/go/src/appWORKDIR/go/src/appCOPY./go/src/appRUNapkadd--updategitgccbuild-baseflexbisongmpRUNwgethttps://crypto.stanford.edu/pbc/files/pbc-0.5.14.tar.gz&&\tar-xvfpbc-0.5.14.tar.gz&&\cdpbc-0.5.14&&\./configure--prefix=$HOME/.local&&\m

go - 混淆 channel 控制流

我正在尝试编写一个事件监听器并尝试控制监听器内部的状态流。我知道我错过了channel使用的一些原则,代码可能看起来很愚蠢。但是,如果有人可以帮助我了解我的错误是什么以及如何改进它,我将不胜感激。此代码无法运行:packagemainimport("fmt""time")typeAstruct{countintchchanboolexitchanbool}func(this*A)Run(){for{select{case2{this.exit它引发错误:hitme0hitme1hitme2hitmefatalerror:allgoroutinesareasleep-deadlock!g

windows - 如何在 Windows 中使用 golang 清除控制台?

我试过很多方法,比如packagemainimport("os""os/exec")funcmain(){c:=exec.Command("cls")c.Stdout=os.Stdoutc.Run()}和C.system(C.CString("cls"))而且转义序列也不起作用 最佳答案 所有你需要的是:packagemainimport("os""os/exec")funcmain(){cmd:=exec.Command("cmd","/c","cls")cmd.Stdout=os.Stdoutcmd.Run()}

c - 添加文件到/usr/local/include

我最近在一台linux机器上安装了openjtalk,我希望能够用Go包装它。openjtalk的源文件有几个不同来源的子文件夹,我假设是编译器找到的,因为有make文件。我应该将每个子文件夹复制到/usr/local/include中吗?这是修复包含依赖项的“正确”方法吗?根据我的测试,如果我复制包含的文件,Go似乎可以找到它们,但我不确定这是否是正确的linux做事方式。 最佳答案 更改外部库的位置通常不是一个好主意。有些库会自动将自己放入编译器的包含路径中,但对于那些不这样做的库,将它们的路径添加到编译器的包含路径中总是一个更

c - 如何将 char * 更改为等效的 Go

我有一些看起来像这样的C代码-*((Oid*)((char*)(tup)其中Oid是一个uint32类型,tup是一个结构。我想把它转换成golang。我已经解码了结构,但无法弄清楚如何将上面的行转换为golang。 最佳答案 Go等价于转换C指针是将指针转换为unsafe.Pointer,然后可以将其转换为您希望的任何类型的指针。如果tup是指向C中结构的指针,您可以将它转换为*uint32,如下所示:u:=(*uint32)(unsafe.Pointer(C.tup)) 关于c-如何